Selle Python Pandase juhendiga navigeerige oma andmestike puuduvate andmete keerukuses. Õppige olulisi tehnikuid imputeerimiseks ja eemaldamiseks, sobilik globaalsele publikule.
Python Pandase andmepuhastuse valdamine: globaalne juhend puuduvate väärtuste käsitlemiseks
Andmeanalüüsi ja masinõppe valdkonnas on andmekvaliteet esmatähtis. Üks kõige levinumaid väljakutseid on puuduvate väärtuste olemasolu. Need võivad tekkida erinevatest allikatest, sealhulgas andmesisestusvigadest, andurite riketest või ebatäielikest uuringutest. Puuduvate andmete tõhus käsitlemine on andmete puhastamise protsessis kriitiline samm, tagades, et teie analüüsid on usaldusväärsed ja teie mudelid on täpsed. See juhend tutvustab teile olulisi tehnikaid puuduvate väärtuste haldamiseks, kasutades võimsat Python Pandase teeki, mis on mõeldud globaalsele publikule.
Miks on puuduvate väärtuste käsitlemine nii oluline?
Puuduvad andmed võivad teie tulemusi oluliselt moonutada. Paljud analüütilised algoritmid ja statistilised mudelid ei ole loodud puuduvate väärtuste käsitlemiseks, mis toob kaasa vigu või kallutatud tulemusi. Näiteks:
- Kallutatud keskmised: Kui puuduvad väärtused on koondunud konkreetsetesse rühmadesse, võib keskmiste arvutamine moonutada populatsiooni tegelikke omadusi.
- Vähendatud valimi suurus: Lihtsalt ridade või veergude kustutamine puuduvate väärtustega võib drastiliselt vähendada teie andmestikku, mis võib viia väärtusliku teabe ja statistilise võimsuse kaotuseni.
- Mudeli jõudluse halvenemine: Ebatäielike andmetega treenitud masinõppe mudelid võivad näidata halba ennustavat jõudlust ja üldistamisvõimet.
- Eksitavad visualiseeringud: Diagrammid ja graafikud võivad esitada ebatäpse pildi, kui puuduvaid andmepunkte ei arvestata.
Puuduvate väärtuste mõistmine ja käsitlemine on iga andmespetsialisti põhioskus, olenemata nende geograafilisest asukohast või tööstusharust.
Puuduvate väärtuste tuvastamine Pandas'es
Pandas pakub intuitiivseid meetodeid puuduvate andmete tuvastamiseks. Puuduvate väärtuste peamised esindused on numbriliste andmete puhul NaN (Not a Number) ja objektitüüpi andmete puhul None. Pandas käsitleb mõlemat kui puuduvat.
Meetodid isnull() ja notnull()
Meetod isnull() tagastab sama kujuga boolean DataFrame'i, mis näitab True, kus väärtus puudub, ja False vastupidisel juhul. Vastupidi, notnull() tagastab True mittepuuduvate väärtuste korral.
import pandas as pd
import numpy as np
# Näidis DataFrame puuduvate väärtustega
data = {'col1': [1, 2, np.nan, 4, 5],
'col2': [np.nan, 'b', 'c', 'd', 'e'],
'col3': [6, 7, 8, np.nan, 10]}
df = pd.DataFrame(data)
print("Algne DataFrame:")
print(df)
print("\nNullväärtuste kontrollimine:")
print(df.isnull())
print("\nMitte-nullväärtuste kontrollimine:")
print(df.notnull())
Puuduvate väärtuste loendamine
Veergude kaupa puuduvate väärtuste kokkuvõtte saamiseks saate isnull() meetodi aheldada sum() meetodiga:
print("\nPuuduvate väärtuste arv veergude kaupa:")
print(df.isnull().sum())
See väljund näitab täpselt, mitu puuduvat kirjet igas veerus eksisteerib, andes kiire ülevaate probleemi ulatusest.
Puuduvate andmete visualiseerimine
Suuremate andmestike puhul võib puuduvate andmete visualiseerimine olla väga kasulik. Teegid nagu missingno aitavad teil tuvastada puudumise mustreid.
# Võimalik, et peate selle teegi installima:
# pip install missingno
import missingno as msno
import matplotlib.pyplot as plt
print("\nPuuduvate andmete visualiseerimine:")
msno.matrix(df)
plt.title("Puuduvate andmete maatriks")
plt.show()
Maatriksi graafik näitab tihedat riba iga veeru kohta, kus andmed on olemas, ja hõredat riba, kus need puuduvad. See võib näidata, kas puudumine on juhuslik või järgib mustrit.
Strateegiad puuduvate väärtuste käsitlemiseks
Puuduvate andmetega tegelemiseks on mitu levinud strateegiat. Strateegia valik sõltub sageli andmete iseloomust, puuduvate väärtuste osakaalust ja analüüsi eesmärkidest.
1. Kustutamise strateegiad
Kustutamine hõlmab andmepunktide eemaldamist, millel on puuduvad väärtused. Kuigi see tundub lihtne, on oluline mõista selle tagajärgi.
a. Rea kustutamine (Listwise Deletion)
See on kõige lihtsam lähenemine: eemaldage terved read, mis sisaldavad vähemalt ühte puuduvat väärtust.
print("\nDataFrame pärast ridade kustutamist mis tahes puuduvate väärtustega:")
df_dropped_rows = df.dropna()
print(df_dropped_rows)
Plussid: Lihtne rakendada, annab puhta andmestiku algoritmidele, mis ei suuda puuduvaid väärtusi käsitleda.
Miinused: Võib viia andmestiku suuruse olulise vähenemiseni, potentsiaalselt kaotades väärtuslikku teavet ja tuues sisse kallutatust, kui puudumine ei ole täielikult juhuslik (MCAR – Missing Completely At Random).
b. Veeru kustutamine
Kui konkreetsel veerul on väga suur protsent puuduvaid väärtusi ja see ei ole teie analüüsi jaoks kriitiline, võite kaaluda kogu veeru kustutamist.
# Näide: Kustuta 'col1', kui sellel oli liiga palju puuduvaid väärtusi (hüpoteetiliselt)
# Demonstratsiooni jaoks loome stsenaariumi, kus 'col1'-s on rohkem puuduvaid andmeid
data_high_missing = {'col1': [1, np.nan, np.nan, np.nan, 5],
'col2': [np.nan, 'b', 'c', 'd', 'e'],
'col3': [6, 7, 8, np.nan, 10]}
df_high_missing = pd.DataFrame(data_high_missing)
print("\nDataFrame potentsiaalselt suure puuduvuse määraga veerus 'col1':")
print(df_high_missing)
print("\nPuuduvad väärtused veergude kaupa:")
print(df_high_missing.isnull().sum())
# Oletame, et otsustame 'col1' kustutada suure puuduvuse tõttu
df_dropped_col = df_high_missing.drop('col1', axis=1) # axis=1 näitab veeru kustutamist
print("\nDataFrame pärast 'col1' kustutamist:")
print(df_dropped_col)
Plussid: Tõhus, kui veerg on puuduvate andmete tõttu suures osas mitteteabeväärtuslik.
Miinused: Väärtuslike tunnuste potentsiaalne kadu. Piir "liiga paljude puuduvate väärtuste" jaoks on subjektiivne.
2. Imputeerimise strateegiad
Imputeerimine hõlmab puuduvate väärtuste asendamist hinnatud või arvutatud väärtustega. Seda eelistatakse sageli kustutamisele, kuna see säilitab andmestiku suuruse.
a. Keskmise/mediaani/moodi imputeerimine
See on levinud ja lihtne imputeerimistehnika. Numbriliste veergude puhul saate puuduvad väärtused asendada selle veeru mittepuuduvate väärtuste keskmise või mediaaniga. Kategooriliste veergude puhul kasutatakse moodi (kõige sagedasemat väärtust).
- Keskmise imputeerimine: Sobib normaalselt jaotatud andmetele. Tundlik kõrvalekalletele.
- Mediaani imputeerimine: Vastupidavam kõrvalekalletele kui keskmise imputeerimine.
- Moodi imputeerimine: Kasutatakse kategooriliste tunnuste jaoks.
# Kasutades algset df-i mõnede NaN väärtustega
print("\nAlgne DataFrame imputeerimiseks:")
print(df)
# Imputeerige puuduvad väärtused 'col1'-s keskmisega
mean_col1 = df['col1'].mean()
df['col1'].fillna(mean_col1, inplace=True)
# Imputeerige puuduvad väärtused 'col3'-s mediaaniga
median_col3 = df['col3'].median()
df['col3'].fillna(median_col3, inplace=True)
# Imputeerige puuduvad väärtused 'col2'-s moodiga
mode_col2 = df['col2'].mode()[0] # mode() võib tagastada mitu väärtust, kui on viik
df['col2'].fillna(mode_col2, inplace=True)
print("\nDataFrame pärast keskmise/mediaani/moodi imputeerimist:")
print(df)
Plussid: Lihtne, säilitab andmestiku suuruse.
Miinused: Võib moonutada andmete dispersiooni ja kovariatsiooni. Eeldab, et keskmine/mediaan/mood on puuduvate andmete hea esindusväärtus, mis ei pruugi alati tõsi olla.
b. Edasi täitmine ja tagasi täitmine
Need meetodid on eriti kasulikud aegridade andmete või loomuliku järjestusega andmete puhul.
- Edasi täitmine (
ffill): Täidab puuduvad väärtused viimase teadaoleva kehtiva vaatlusega. - Tagasi täitmine (
bfill): Täidab puuduvad väärtused järgmise teadaoleva kehtiva vaatlusega.
# Loo uuesti DataFrame puuduvate väärtustega, mis sobivad ffill/bfill jaoks
data_time_series = {'value': [10, 12, np.nan, 15, np.nan, np.nan, 20]}
df_ts = pd.DataFrame(data_time_series)
print("\nAlgne DataFrame aegridade imputeerimiseks:")
print(df_ts)
# Edasi täitmine
df_ts_ffill = df_ts.fillna(method='ffill')
print("\nDataFrame pärast edasi täitmist:")
print(df_ts_ffill)
# Tagasi täitmine
df_ts_bfill = df_ts.fillna(method='bfill')
print("\nDataFrame pärast tagasi täitmist:")
print(df_ts_bfill)
Plussid: Kasulik järjestatud andmete jaoks, säilitab ajalised seosed.
Miinused: Võib levitada valesid väärtusi, kui puuduvad andmed on pikalt vahepeal. ffill ei arvesta tuleviku teavet ja bfill ei arvesta mineviku teavet.
c. Imputeerimine Groupby abil
Keerulisem lähenemine on puuduvate väärtuste imputeerimine rühma statistika põhjal. See on eriti kasulik, kui kahtlustate, et puudumine on seotud konkreetse kategooria või rühmaga teie andmetes.
data_grouped = {
'category': ['A', 'B', 'A', 'B', 'A', 'B', 'A', 'B'],
'value': [10, 20, np.nan, 25, 15, 30, 12, np.nan]
}
df_grouped = pd.DataFrame(data_grouped)
print("\nAlgne DataFrame rĂĽhmitatud imputeerimiseks:")
print(df_grouped)
# Imputeerige puuduv 'value' iga 'category' keskmise 'value' alusel
df_grouped['value'] = df_grouped.groupby('category')['value'].transform(lambda x: x.fillna(x.mean()))
print("\nDataFrame pärast rühmitatud keskmise imputeerimist:")
print(df_grouped)
Plussid: Arvestab rühmadevahelisi variatsioone, mis viib sageli täpsemate imputeerimistulemusteni kui globaalne keskmine/mediaan/mood.
Miinused: Nõuab asjakohast rühmitusmuutujat. Võib olla arvutuslikult intensiivne väga suurte andmestike puhul.
d. Keerukamad imputeerimistehnikad
Keerulisemate stsenaariumide, eriti masinõppe torujuhtmete puhul, kaaluge neid täiustatud meetodeid:
- K-Lähima Naabri (KNN) Imputeerija: Imputeerib puuduvad väärtused, kasutades treeningkomplektis leitud K lähima naabri väärtusi.
- Iteratiivne Imputeerija (nt MICE – Multiple Imputation by Chained Equations abil): Modereerib iga puuduvate väärtustega tunnust teiste tunnuste funktsioonina ja kasutab iteratiivset Bayesi maatriksi täiendamist imputeerimiseks.
- Regressiooni imputeerimine: Ennustab puuduvad väärtused regressioonimudelite abil.
Need meetodid on ĂĽldjuhul saadaval teekides nagu Scikit-learn.
# Näide Scikit-learn'i KNNImputer'i kasutamisest
from sklearn.impute import KNNImputer
# KNNImputer töötab numbriliste andmetega. Kasutame näidis numbrilist DataFrame'i.
data_knn = {'A': [1, 2, np.nan, 4, 5],
'B': [np.nan, 20, 30, 40, 50],
'C': [100, np.nan, 300, 400, 500]}
df_knn = pd.DataFrame(data_knn)
print("\nAlgne DataFrame KNN imputeerimiseks:")
print(df_knn)
imputer = KNNImputer(n_neighbors=2) # Kasuta 2 lähimat naabrit
df_knn_imputed_arr = imputer.fit_transform(df_knn)
df_knn_imputed = pd.DataFrame(df_knn_imputed_arr, columns=df_knn.columns)
print("\nDataFrame pärast KNN imputeerimist:")
print(df_knn_imputed)
Plussid: Võib pakkuda täpsemaid imputatsioone, arvestades tunnuste vahelisi seoseid.
Miinused: Arvutuslikult kallim, nõuab hoolikat rakendamist ja eeldused tunnuste suhete kohta peavad paika pidama.
Puuduvate väärtuste käsitlemine kategoorilistes andmetes
Kategoorilised andmed pakuvad omaette väljakutseid. Kuigi moodi imputeerimine on levinud, on tõhusad ka muud strateegiad:
- Moodi imputeerimine: Nagu varem näidatud, täitmine kõige sagedasema kategooriaga.
- Uue kategooria loomine: Käsitletakse puuduvaid väärtusi eraldi kategooriana (nt "Tundmatu", "Puuduv"). See on kasulik, kui andmete puudumise fakt ise on informatiivne.
- Imputeerimine teiste tunnuste põhjal: Kui kategoorilise tunnuse ja teiste tunnuste vahel on tugev seos, võite puuduva kategooria ennustamiseks kasutada klassifikaatorit.
data_cat = {'Product': ['A', 'B', 'A', 'C', 'B', 'A', np.nan],
'Region': ['North', 'South', 'East', 'West', 'North', np.nan, 'East']}
df_cat = pd.DataFrame(data_cat)
print("\nAlgne DataFrame kategooriliste andmete käsitlemiseks:")
print(df_cat)
# Strateegia 1: Moodi imputeerimine 'Region' jaoks
mode_region = df_cat['Region'].mode()[0]
df_cat['Region'].fillna(mode_region, inplace=True)
# Strateegia 2: Loo uus kategooria 'Product' jaoks
df_cat['Product'].fillna('Unknown', inplace=True)
print("\nDataFrame pärast kategoorilist imputeerimist:")
print(df_cat)
Parimad tavad ja kaalutlused globaalsele publikule
Erinevatest allikatest ja globaalsele publikule mõeldud andmetega töötamisel arvestage järgmiste punktidega:
- Mõistke andmeallikat: Miks väärtused puuduvad? Kas see on süsteemne probleem andmete kogumisel konkreetses piirkonnas või platvormil? Päritolu teadmine võib teie strateegiat suunata. Näiteks, kui küsitlusplatvorm ei suuda järjepidevalt teatud riigis teatud demograafilist gruppi jäädvustada, ei pruugi see puudumine olla juhuslik.
- Kontekst on võtmetähtsusega: "Õige" viis puuduvate väärtuste käsitlemiseks sõltub kontekstist. Finantsmudel võib nõuda hoolikat imputeerimist, et vältida isegi väikeseid eelarvamusi, samas kui kiireks uurivaks analüüsiks võivad piisata lihtsamad meetodid.
- Kultuurilised nüansid andmetes: Andmete kogumise meetodid võivad kultuuriti erineda. Näiteks kuidas "sissetulekut" teatatakse või kas "ei kohaldata" on tavaline vastus, võib varieeruda. See võib mõjutada seda, kuidas puuduvaid väärtusi tõlgendatakse ja käsitletakse.
- Ajavööndid ja andmete mahajäämus: Aegridade andmete puhul, mis pärinevad erinevatest ajavöönditest, veenduge, et andmed on standardiseeritud (nt UTC-ks) enne ajapõhiste imputeerimismeetodite (nagu ffill/bfill) rakendamist.
- Valuuta ja ühikud: Numbriväärtuste imputeerimisel, mis hõlmavad erinevaid valuutasid või ühikuid, tagage enne imputeerimist järjepidevus või sobiv konversioon.
- Dokumenteerige oma otsused: Dokumenteerige alati meetodid, mida kasutasite puuduvate andmete käsitlemiseks. See läbipaistvus on oluline reprodutseeritavuse ja teistele teie analüüsi mõistmiseks.
- Iteratiivne protsess: Andmete puhastamine, sealhulgas puuduvate väärtuste käsitlemine, on sageli iteratiivne protsess. Võite proovida ühte meetodit, hinnata selle mõju ja seejärel oma lähenemist täpsustada.
- Kasutage teeke targalt: Pandas on teie peamine tööriist, kuid keerukamate imputatsioonide jaoks on Scikit-learn hindamatu. Valige töö jaoks õige tööriist.
Järeldus
Puuduvad väärtused on reaalmaailma andmetega töötamise vältimatu osa. Python Pandas pakub paindlikke ja võimsaid tööriistu nende puuduvate kirjete tuvastamiseks, analüüsimiseks ja käsitlemiseks. Olenemata sellest, kas valite kustutamise või imputeerimise, on igal meetodil oma kompromissid. Mõistes neid tehnikaid ja arvestades oma andmete globaalset konteksti, saate oluliselt parandada oma andmeanalüüsi ja masinõppe mudelite kvaliteeti ja usaldusväärsust. Nende andmepuhastuse oskuste valdamine on tõhusa andmespetsialistiks saamise nurgakivi igas maailma osas.
Peamised järeldused:
- Tuvastage: Kasutage
df.isnull().sum()ja visualiseerimisi. - Kustutage: Kasutage
dropna()kaalutletult, olles teadlik andmekaotusest. - Imputeerige: Kasutage
fillna()koos keskmise, mediaani, moodi, ffill, bfill või Scikit-learn'i täiustatud tehnikatega. - Kontekst on oluline: Parim strateegia sõltub teie andmetest ja eesmärkidest.
- Globaalne teadlikkus: Arvestage kultuuriliste nüansside ja andmete päritoluga.
Jätkake nende tehnikate harjutamist ja te loote tugeva aluse usaldusväärsetele andmeteaduse töövoogudele.